/**
 * 泛型函数 就是两个值之间存在的对应关系
 * 泛型函数推断的功能 调用函数的时候会根据传入的参数类型去推断输入的类型
 * */

// function firstElement(arr: any[]) {
//   return arr[0]
// }

// firstElement(['a', 'b', 'c'])

// function firstElement<T>(arr: T[]): T | undefined {
//   return arr[0]
// }

// firstElement(['a', 'b', 'c'])
// firstElement([1, 2, 3])
// firstElement([])

function map<I, O>(arr: I[], func: (args: I) => O): O[] {
  return arr.map(func)
}

const parsed = map(['1', '2', '3'], (n) => parseInt(n))

console.log(parsed)